决策树可视化【含Python源码】

您所在的位置:网站首页 sklearn 决策树源代码 决策树可视化【含Python源码】

决策树可视化【含Python源码】

2024-07-16 10:51:43| 来源: 网络整理| 查看: 265

决策树是一种流行的有监督学习方法。决策树的优势在于其既可以用于 回归,也可以用于分类,不需要特征缩放,而且具有比较好的可解释性, 容易将决策树可视化。可视化的决策树不仅是理解你的模型的好办法, 也是向其他人介绍你的模型的运作机制的有利工具。因此掌握决策树 可视化的方法对于数据分析工作者来说非常重要。

在这个教程里,我们将学习以下内容:

如何使用scikit-learn训练一个决策树模型 如何使用Matplotlib将决策树可视化 如何使用Graphviz将决策树可视化 如何将随机森林或决策树包中的单个决策树可视化

教程的代码可以从这里下载。 现在让我们开始吧。

1、用scikit-learn训练决策树模型

为了可视化决策树,我们首先需要用scikit-learn训练出一个决策树模型。

首先导入必要的Python库:

123456789import matplotlib.pyplot as pltfrom sklearn.datasets import load_irisfrom sklearn.datasets import load_breast_cancerfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import train_test_splitimport pandas as pdimport numpy as npfrom sklearn import tree

然后载入iris数据集。scikit-learn内置了Iris数据集,因此我们不需要 从其他网站下载了。下面的Python代码载入Iris数据集:

1234import pandas as pdfrom sklearn.datasets import load_irisdata = load_iris()df = pd.DataFrame(data.data, columns=data.feature_names)df['target'] = data.target

Iris数据集看起来是这样:

接下来我们将Iris数据集拆分为训练集和测试集:

1X_train, X_test, Y_train, Y_test = train_test_split(df[data.feature_names], df['target'], random_state=0)

分割后的Iris数据集看起来是这样:

最后,我们采用scikit-learn经典的4步模式训练决策树模型:

1234567891011# Step 1: Import the model you want to use# This was already imported earlier in the notebook so commenting out#from sklearn.tree import DecisionTreeClassifier# Step 2: Make an instance of the Modelclf = DecisionTreeClassifier(max_depth = 2, random_state = 0)# Step 3: Train the model on the dataclf.fit(X_train, Y_train)# Step 4: Predict labels of unseen (test) data# Not doing this step in the tutorial# clf.predict(X_test) 2、使用Matplotlib将决策树可视化

从scikit-learn 版本21.0开始,可以使用scikit-learn的tree.plot_tree 方法来利用matplotlib将决策树可视化,而不再需要依赖于难以安装的dot库。 下面的Python代码展示了如何使用scikit-learn将决策树可视化:

1tree.plot_tree(clf);

决策树可视化结果如下:

还可以添加一些额外的Python代码以便让绘制出的决策树具有更好的 可解读性,例如添加特征和分类名称:

12345678fn=['sepal length (cm)','sepal width (cm)','petal length (cm)','petal width (cm)']cn=['setosa', 'versicolor', 'virginica']fig, axes = plt.subplots(nrows = 1,ncols = 1,figsize = (4,4), dpi=300)tree.plot_tree(clf, feature_names = fn, class_names=cn, filled = True);fig.savefig('imagename.png')

增加了更多信息的决策树可视化结果如下:

3、使用Graphviz将决策树可视化

下图是使用Graphviz得到的决策树可视化结果:

Graphviz是一个开源的图(Graph)可视化软件,采用抽象的图和网络 来表示结构化的信息。在数据科学领域,Graphviz的一个用途就是实现 决策树可视化。我将graphviz方法放在matplotlib方法之后,是因为 这个软件用起来有点复杂。

为了将决策树可视化,首先需要创建一个dot文件来描述决策树,这个倒 不难。问题在于使用Graphviz将dot文件转换为图形文件,例如png、jpg等等 可能会有点难度。

有一些办法来降低graphviz的使用门槛,例如通过Anaconda安装python-graphviz、 利用mac的homebrew安装grahpviz、利用官方提供的windows安装文件、或者使用 在线转换器将决策树的dot文件转换为图形:

首先我们将决策树模型导出为dot文件:

12345tree.export_graphviz(clf, out_file="tree.dot", feature_names = fn, class_names=cn, filled = True)

然后我们用conda安装graphviz:

1conda install python-graphviz

现在就可以将决策树模型导出的dot文件转换为图形文件了:

1dot -Tpng tree.dot -o tree.png 4、将决策树包或随机森林里的单个决策树可视化

决策树的一个缺点是通常其预测精度不够好。这部分原因在于其 变化幅度比较大,对训练数据的不同拆分方式可能会生成截然不同 的决策树模型。

上图可以表示决策树包或者随机森林模型之类的组合学习方法, 通过将多个机器学习算法组合起来以期获得更好的预测性能。 在这一部分,我们学习如何将这些组合模型中的单个决策树可视化。

首先还是使用scikit-learn来训练得到一个随机森林模型:

12345678910111213# Load the Breast Cancer (Diagnostic) Datasetdata = load_breast_cancer()df = pd.DataFrame(data.data, columns=data.feature_names)df['target'] = data.target# Arrange Data into Features Matrix and Target VectorX = df.loc[:, df.columns != 'target']y = df.loc[:, 'target'].values# Split the data into training and testing setsX_train, X_test, Y_train, Y_test = train_test_split(X, y, random_state=0)# Random Forests in `scikit-learn` (with N = 100)rf = RandomForestClassifier(n_estimators=100, random_state=0)rf.fit(X_train, Y_train)

现在我们可以将模型中的单个决策树可视化。首先还是使用matplotlib。 下面的python代码将第1个决策树可视化:

12345678fn=data.feature_namescn=data.target_namesfig, axes = plt.subplots(nrows = 1,ncols = 1,figsize = (4,4), dpi=800)tree.plot_tree(rf.estimators_[0], feature_names = fn, class_names=cn, filled = True);fig.savefig('rf_individualtree.png')

得到的这个决策树可视化结果如下:

你可以试着使用matplotlib的subplot来将你期望的多个决策树可视化。 例如下面的Python代码将组合模型中的前5个决策树可视化:

12345678910# This may not the best way to view each estimator as it is smallfn=data.feature_namescn=data.target_namesfig, axes = plt.subplots(nrows = 1,ncols = 5,figsize = (10,2), dpi=3000)for index in range(0, 5): tree.plot_tree(rf.estimators_[index], feature_names = fn, class_names=cn, filled = True, ax = axes[index]); axes[index].set_title('Estimator: ' + str(index), fontsize = 11)fig.savefig('rf_5trees.png')

不过我个人不喜欢这么做,因为这看起来太费眼睛了:

5、教程小结

在这个教程里,我们学习了如何使用matplotlib和graphviz将scikit-learn 训练得到的决策树可视化,也学习了如何将组合模型中的一个或多个决策树 可视化,希望这有助于你的数据分析工作。

原文链接:Visualizing Decision Trees with Python

汇智网翻译整理,转载请标明出处



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭